[VC6.0 MFC] 关于动态加载.jpg格式图片

来源:百度知道 编辑:UC知道 时间:2024/07/04 11:01:55
目前做的是相机控制软件
要求测试拍摄后能将图片预览到一个对话框里
而在VC++6.0 MFC里一般只能加载bmp图片,相机拍摄只有jpg和raw

我在网上查过资料,最多的是用
"OleLoadPicture创建了一个IPicture类型的COM接口对象"
可我需要动态地引用资源,而不是在编写程序时载入固定资源
(图片是程序运行时相机拍摄的,不可能提前载入)

问1:这个OleLoadPicture到底能不能实现动态加载?
问2:如果可以,请问需要什么样的动态库或文件,是否需要另行下载
问3:有没有详细的或是可行的实例
问4:除了这类方法,有没有其他更易使用的

也看过GDI+,不知道这种方法是否可行
因为时间有限所以不想做太多研究,先找对一个方向猛攻
希望有经验的朋友能支招,感激不尽
追加50分...

6.0打开的快,轻便些,加了Visual Assist,比较习惯用这个
不过,现在6.0的项目已经做了一半了,能不能挪到2008里继续做呢?
6.0的atl库太难找,我看.net里有但需要改
.net2003和.net2005我倒是都有,atlImage.h文件可以直接从里面找到么?

mark一下,有时间我给你看看。 - -#

其实,正如二楼所说的,用2005或2008很简单的
#include <atlimage.h>
CImage img;
HRESULT hResult;
hResult = img.Load(_T("C:\\xxx.jpg"));

用cximage或者gdi+处理JPG都是可行的,GDI+相对来说更容易用。
raw文件就得自己处理了,因为raw文件格式也不是固定的标准格式。
另外相机控制控件,重新封装一下twain的库和接口即可。

至于,MFC我在看看吧,毕竟比较落伍了 - -#

用atl的CImage类。
vc++.net以后的版本有,vc6的,你可以自己找个atl库。

我就搞不明白了,vc6都10年了,为什么还这么多人用。
vc2008不好吗

可以直接找到的。从vc6到高版本转换,只要你没使用非标准c++的东西,直接就能编译。

OleLoadPicture可以动态加载。
Ole32.dll olepro32.dll
eg:

void DisplayImage(HDC hDC, LPCTSTR szImagePath)
{
HANDLE hFile=CreateFile(szImagePath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); //从指定的路径szImagePath中读取文件句柄
DWORD dwFileSize=GetFileSize(hFile, NULL); //获得图片文件的大小,用来分配全局内存
HGLOBAL hImageMemory=GlobalAlloc(GMEM_MOVEABLE, dwFileSize); //给图片分配全局内存
void *pImageMemory=GlobalLock(hImageMem